package br.com.sebrae.pr.sgp.util.exceptions;

import org.apache.commons.lang3.exception.ExceptionUtils;

import br.com.sebrae.pr.sgp.util.CustomStringUtils;
import br.com.sebrae.pr.sgp.util.exceptions.messages.PropertyUtilMensagensErro;

/**
 * Classe que representa uma exceção, possível de apresentação para o usuário.
 * 
 * @author Tanaka
 */
public class ExcecaoDeApresentacao extends RuntimeException {
	private static final long serialVersionUID = 1568162278027986945L;

	public static final String SESSION_ATTR_ID = "EXCECAO_DE_APRESENTACAO";
	private final String mensagem;
	private final TipoErro tipoErro;

	public ExcecaoDeApresentacao(final TipoErro tipoMensagem,
			final String msgKey, final Throwable causa) {
		super(
				CustomStringUtils.replace(
						PropertyUtilMensagensErro.getProperty(msgKey),
						new String[] {}), causa);
		this.mensagem = CustomStringUtils.replace(
				PropertyUtilMensagensErro.getProperty(msgKey), new String[] {});
		this.tipoErro = tipoMensagem;
	}

	public ExcecaoDeApresentacao(final TipoErro tipoErro, final String msgKey,
			final String[] params, final Throwable causa) {
		super(CustomStringUtils.replace(
				PropertyUtilMensagensErro.getProperty(msgKey), params), causa);
		this.mensagem = CustomStringUtils.replace(
				PropertyUtilMensagensErro.getProperty(msgKey), params);
		this.tipoErro = tipoErro;
	}

	public String getMensagem() {
		return mensagem;
	}

	public TipoErro getTipoErro() {
		return tipoErro;
	}

	public String getStackTraceHTML() {
		return CustomStringUtils.substituiLineBreaksPorBR(ExceptionUtils
				.getStackTrace(super.getCause()));
	}
}
